package c07运行环境与常用类;

import java.io.*;
import java.util.*;

public class TestSystem {
	public static void main(String[] args) throws Exception {
		/**
		 * 操作数组
		 */
		int[] is0 = new int[10];
		int[] is1 = new int[10];
		for (int i = 0; i < is0.length; i++) {
			is0[i] = i;
		}
		//所有参数都必须合理，否则都会引发异常！
		System.arraycopy(is0, 0, is1, 0, is0.length);
		for (int i : is1) {
			System.err.print(i + ",");
		}
		System.err.println();

		/**
		 * identityHashCode根据对象的地址来计算hash码，所以若返回的hash码相等那么两个对象就必定是同一个对象！
		 */
		Object o = new Object();
		Object ox = new Object();
		//Object的hashCode方法默认是根据地址来算hashCode的，所以下面相等：
		System.err.println(o.hashCode() == System.identityHashCode(o));//true
		System.err.println(o.hashCode() == ox.hashCode());//false
		String s0 = new String("xxx");
		String s1 = new String("xxx");
		//String重写了hashCode方法，根据字符串序列来算hashCode，所以下面相等：
		System.err.println(s0.hashCode() == s1.hashCode());//true
		System.err.println(System.identityHashCode(s0) == System.identityHashCode(s1));//false
		String sa = "xxx";
		String sb = "xxx";
		//sa和sb引用同一个字符串对象，地址相等：
		System.err.println(sa.hashCode() == sb.hashCode());//true
		System.err.println(System.identityHashCode(sa) == System.identityHashCode(sb));//true

		/**
		 * 环境变量操作
		 */
		//获取系统所有的环境变量
//		Map<String,String> env = System.getenv();//返回一个不能修改的当前系统环境的字符串映射视图
//		for (String name : env.keySet())
//		{
//			System.err.println(name + " ---> " + env.get(name));
//		}
		//获取指定环境变量的值
		System.err.println(System.getenv("JAVA_HOME"));
		//获取所有的系统属性
		Properties props = System.getProperties();
		//将所有系统属性保存到props.txt文件中
		props.store(new FileOutputStream("props.txt")
				, "System Properties");//后面的提示信息将会写在第一行
		//输出特定的系统属性
		System.err.println(System.getProperty("os.name"));


	}
}
